/**
 * Multiworker 2000
 * @brief Classe de configuração do sistema
 * @author André Luiz de Oliveira Vasconcelos
 * @file config.cpp
 * @date 2011
 */

#include "config.h"
#include <QFile>
#include <QDebug>

/**
 * Construtor
 */
Config::Config() 
{
}

/**
 * Destrutor
 */
Config::~Config()
{
}

/**
 * setNomeArquivo
 * @brief Seta o atributo nome do arquivo
 * @author André Luiz Vasconcelos
 * @param nomeArquivo Nome do arquivo
 */
void Config::setNomeArquivo( QString nomeArquivo )
{
    this->nomeArquivo = nomeArquivo;
}

/**
 * getNomeArquivo
 * @brief Retorna o conteúdo do atributo nome do arquivo
 * @author André Luiz Vasconcelos
 * @return QString Nome do arquivo
 */
QString Config::getNomeArquivo()
{
    return this->nomeArquivo;
}

/**
 * setAtributo
 * @brief Seta o conteúdo do atributo passado como parâmetro
 * @author André Luiz Vasconcelos
 * @param nomeAtributo Nome do atributo
 * @param conteudo Conteúdo
 */
void Config::setAtributo( QString nomeAtributo, QString conteudo )
{
    this->atributo[ nomeAtributo ] = conteudo;
}

/**
 * apagarValorAtributo
 * @brief Apaga o conteúdo do atributo passado como parâmetro
 * @author André Luiz Vasconcelos
 * @param nomeAtributo Nome do atributo
 */
void Config::apagarValorAtributo(QString nomeAtributo)
{
    if( this->atributo.contains( nomeAtributo ) ){
         this->atributo[ nomeAtributo ].clear();
    }
}

/**
 * getAtributo
 * @brief Retorna o conteúdo do atributo passado como parâmetro
 * @author André Luiz Vasconcelos
 * @param nomeAtributo Nome do atributo
 * @return QString Conteúdo do atributo
 */
QString Config::getAtributo( QString nomeAtributo )
{
    return this->atributo.value( nomeAtributo );
}

/**
 * lerArquivo
 * @brief Lê o arquivo XML de configuração
 * @author André Luiz Vasconcelos
 */
Mensagem Config::lerArquivo()
{
    Mensagem mensagem;

    // Verifica se o nome do arquivo de configuração foi informado
    if( this->getNomeArquivo().isEmpty() ){
        mensagem.setErro(QObject::tr("O nome do arquivo de configuração não informado."));
        return mensagem;
    }

    QFile arquivo( this->getNomeArquivo() );

    // Verifica se o arquivo existe
    if( !arquivo.exists() ){
        mensagem.setErro(QObject::tr("Não localizei o arquivo de configuração: %1.").arg(this->getNomeArquivo()));
        return mensagem;
    }

    // Tenta abrir o arquivo
    if( !arquivo.open( QFile::ReadOnly | QFile::Text ) ){
        mensagem.setErro(QObject::tr("Não conseguí abrir o arquivo %1.").arg(this->getNomeArquivo()));
        return mensagem;
    }

    // Cria objeto DOM para tratamento do XML
    QDomDocument doc;
    if(!doc.setContent(&arquivo)){
        mensagem.setErro(QObject::tr("Erro lendo XML."));
        return mensagem;
    }

    QDomElement raiz = doc.documentElement();
    if(raiz.tagName() != "mw360"){
        mensagem.setErro(QObject::tr("Arquivo XML inválido."));
        return mensagem;
    }

    QDomNode propriedades = raiz.firstChild();
    // Percorre os registros
     while(!propriedades.isNull()){
        QDomElement elemento = propriedades.toElement();
        this->setAtributo(elemento.tagName(), elemento.text());
        propriedades = propriedades.nextSibling();
    }

    // Seta dados para a conexão
    this->conexao.setServidor(this->getAtributo("servidor"));
    this->conexao.setBanco(this->getAtributo("banco"));

    return mensagem;
}

